/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package sisgraf.model;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
import java.util.Set;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import static javax.persistence.GenerationType.IDENTITY;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToOne;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import sisgraf.controler.PedidoControler;
/**
 *
 * @author Jordan Guerra
 */
@Entity

public class Pedido implements java.io.Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy=IDENTITY)
    @Column(name="id", unique=true, nullable=false)
    private Integer id;
    @OneToOne(optional = false)
    @JoinColumn(name="idItemOrcamento", referencedColumnName = "id", nullable=false)
    private ItemOrcamento itemOrcamento;
    @Temporal(TemporalType.DATE)
    @Column(name="dataPrevisaoEntrega", length=10)
    private Date dataPrevisaoEntrega;
    @Temporal(TemporalType.DATE)
    @Column(name="dataEntrega", length=10)
    private Date dataEntrega;
    @Temporal(TemporalType.DATE)
    @Column(name="dataFaturamento", length=10)
    private Date dataFaturamento;
    @Temporal(TemporalType.DATE)
    @Column(name="dataCancelamento", length=10)
    private Date dataCancelamento;
    @Column(name="valor", precision=13)
    private BigDecimal valor;
    private String observacoes;

    public Pedido() {
       this.id=null;
       this.itemOrcamento = null;
       this.dataPrevisaoEntrega = null;
       this.dataEntrega = null;
       this.dataFaturamento = null;
       this.dataCancelamento = null;
       this.valor = null;
       this.observacoes=null;
    }
    public Pedido(Integer id) {
        this.id=id;
        this.itemOrcamento = null;
        this.dataPrevisaoEntrega = null;
        this.dataEntrega = null;
        this.dataFaturamento = null;
        this.dataCancelamento = null;
        this.valor = null;
        this.observacoes=null;
    }
    public Pedido(Orcamento orcamento, ItemOrcamento itemOrcamento, Date dataPrevisaoEntrega) {
        this.id=null;
        this.itemOrcamento = itemOrcamento;
        this.dataPrevisaoEntrega = dataPrevisaoEntrega;
        this.dataEntrega = null;
        this.dataFaturamento = null;
        this.dataCancelamento = null;
        this.valor = null;
        this.observacoes=null;
    }
    public Pedido(Orcamento orcamento, ItemOrcamento itemOrcamento, Date dataPrevisaoEntrega, Date dataEntrega, Date dataFaturamento, Date dataCancelamento, BigDecimal valor) {
        this.id=null;
        this.itemOrcamento = itemOrcamento;
        this.dataPrevisaoEntrega = dataPrevisaoEntrega;
        this.dataEntrega = dataEntrega;
        this.dataFaturamento = dataFaturamento;
        this.dataCancelamento = dataCancelamento;
        this.valor = valor;
        this.observacoes=null;
    }
    // Construtor para Extrato de orçamento onde valor é a soma feita por group by
    public Pedido(ItemOrcamento itemOrcamento, BigDecimal valor) {
        this.id=null;
        this.itemOrcamento = itemOrcamento;
        this.valor = valor;
    }
    // Construtor utiizado para gravar os pedidos na aprovação do orçamento
    public Pedido (Set<ItemOrcamento> setItemOrcamento){
        ItemOrcamento pesq;
        Iterator it = setItemOrcamento.iterator();
        Pedido pedido = new Pedido();
        PedidoControler pedidoControler =new PedidoControler();
        Requisicao requisicao = new Requisicao();

	while (it.hasNext())
	{
	   pesq= (ItemOrcamento) it.next();
           if (pesq.getDataAprovacao()!=null){
               pedido.setDataCancelamento("");
               pedido.setDataPrevisaoEntrega(pesq.getPrazoEntrega());
               pedido.setDataFaturamento("");
               pedido.setDataEntrega("");
               pedido.setItemorcamento(pesq);
               pedido.setValor(pesq.getValor());
               if (!pedidoControler.adicionarPedido(pedido)){
                  javax.swing.JOptionPane.showMessageDialog(null,
                        "Erro na inclusão de pedido aprovado\n"
                        + "item:"+pesq.getId().toString(),
                        "Acesso ao Banco de Dados",
                        javax.swing.JOptionPane.INFORMATION_MESSAGE);
               } else {
                   if (!requisicao.gravar(pesq)){
                      javax.swing.JOptionPane.showMessageDialog(null,
                            "Erro na gravação da requisição do pedido aprovado\n"
                            + "item:"+pesq.getId().toString(),
                            "Acesso ao Banco de Dados",
                            javax.swing.JOptionPane.INFORMATION_MESSAGE);
                   }
               }
           }
	}
        
    }
    public Integer getId() {
        return this.id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public ItemOrcamento getItemOrcamento() {
        return this.itemOrcamento;
    }
    public void setItemorcamento(ItemOrcamento itemOrcamento) {
        this.itemOrcamento = itemOrcamento;
    }
    public Date getDataPrevisaoEntrega() {
        return this.dataPrevisaoEntrega;
    }
    public void setDataPrevisaoEntrega(Date dataPrevisaoEntrega) {
        this.dataPrevisaoEntrega = dataPrevisaoEntrega;
    }
    public void setDataPrevisaoEntrega(String dataPrevisaoEntrega) {
        SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");
        java.util.Date data=null;
        try {
            data = formato.parse(dataPrevisaoEntrega);
        } catch (ParseException ex) {
            data=null;
        } finally {
            this.dataPrevisaoEntrega = data;
        }
    }
    public String getDataPrevisaoEntregaForm() {
        String data="  /  /    ";
        if (this.dataPrevisaoEntrega!=null){
            SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");
            data = formato.format(this.dataPrevisaoEntrega);
        }
        return data;
    }
    public Date getDataEntrega() {
        return this.dataEntrega;
    }
    public void setDataEntrega(Date dataEntrega) {
        this.dataEntrega = dataEntrega;
    }
    public void setDataEntrega(String dataEntrega) {
        SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");
        java.util.Date data=null;

        try {
            data = formato.parse(dataEntrega);
        } catch (ParseException ex) {
            data=null;
        } finally {
            this.dataEntrega = data;
        }
    }
    public String getDataEntregaForm() {
        String data="  /  /    ";
        if (this.dataEntrega!=null){
            SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");
            data = formato.format(this.dataEntrega);
        }
        return data;
    }
    public Date getDataFaturamento() {
        return this.dataFaturamento;
    }
    public void setDataFaturamento(Date dataFaturamento) {
        this.dataFaturamento = dataFaturamento;
    }
    public void setDataFaturamento(String dataFaturamento) {
        SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");
        java.util.Date data=null;

        try {
            data = formato.parse(dataFaturamento);
        } catch (ParseException ex) {
            data=null;
        } finally {
            this.dataFaturamento = data;
        }
    }
    public String getDataFaturamentoForm() {
        String data="  /  /    ";
        if (this.dataFaturamento!=null){
            SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");
            data = formato.format(this.dataFaturamento);
        }
        return data;
    }
    public Date getDataCancelamento() {
        return this.dataCancelamento;
    }
    public void setDataCancelamento(Date dataCancelamento) {
        this.dataCancelamento = dataCancelamento;
    }
    public void setDataCancelamento(String dataCancelamento) {
        SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");
        java.util.Date data=null;

        try {
            data = formato.parse(dataCancelamento);
        } catch (ParseException ex) {
            data=null;
        } finally {
            this.dataCancelamento = data;
        }
    }
    public String getDataCancelamentoForm() {
        String data="  /  /    ";
        if (this.dataCancelamento!=null){
            SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");
            data = formato.format(this.dataCancelamento);
        }
        return data;
    }
    public BigDecimal getValor() {
        return this.valor;
    }
    public void setValor(BigDecimal valor) {
        this.valor = valor;
    }
    public String getValorForm() {
        String valorAux = this.valor.toString();
        valorAux = valorAux.replace('.', ',');
        return valorAux;
    }
    public String getObservacoes(){
        return this.observacoes;
    }
    public void setObservacoes(String observacoes){
        this.observacoes=observacoes;
    }



    public String getObsOrc (){
        ServicoItemOrcamento pesq;
        Iterator it = itemOrcamento.getServicoItemOrcamento().iterator();
        String obsOrc="";

	while (it.hasNext())
	{
	   pesq= (ServicoItemOrcamento) it.next();
           if (pesq.getObservacoes()!=null){
               if (!pesq.getObservacoes().equals("")){
                   if (obsOrc.equals("")) obsOrc=obsOrc+"\n";
                   obsOrc=obsOrc+pesq.getObservacoes();
               }
           }
	}
        return obsOrc;
    }
    public BigDecimal getComissao(){
        BigDecimal comVen=new BigDecimal(this.getItemOrcamento().getOrcamento().getVendedor().getComVen().toString());
        BigDecimal valor=new BigDecimal(this.valor.toString());
        valor = valor.multiply(comVen);
        valor = valor.divide(new BigDecimal("100"));
        valor = valor.setScale(2,RoundingMode.HALF_UP);
        return valor;
    }




}
